Les Handlers
Les handlers Ansible permettent de notifier et d'exécuter des actions en fonction de l'état d'une tâche. Par exemple, si une tâche provoque une modification, comme la modification d'une configuration Apache, alors vous redémarrez le service concerné.
Les handlers se définissent au niveau d'un rôle dans un répertoire nommé "handlers" par convention. Le fichier principal main.yml contient alors une liste de tâches Ansible identifiées par leur name. Il s'agit généralement de tâches de redémarrage de service, comme par exemple :
---
- name: restart apache
  ansible.builtin.systemd_service:
    name: apache2
    state: restarted
L'identifiant de cette tâche "restart apache" doit ensuite être notifié lors de la description de la tâche dans tasks/main.yml :
---
- name: copy security.conf
  ansible.builtin.copy:
    src: security.conf
    dest: /etc/apache2/conf-available/security.conf
  notify: restart apache
C'est la ligne notify qui déclenchera le handler nommé "restart apache" uniquement si le fichier security.conf est modifié. Les notifications sont traitées à la fin de l'exécution du playbook de manière optimisée. Par exemple, si deux actions nécessitent un redémarrage d'Apache, alors un seul handler "restart apache" sera exécuté.
Nginx avec Ansible et Handlers
Voici un exemple concret d'utilisation des handlers avec Nginx dans Ansible :
/ansible/playbooks/roles/nginx/tasks/main.yml :
---
- name: Install Nginx
  ansible.builtin.apt:
    name: nginx
    state: present
    update_cache: yes
- name: Copy statik web
  ansible.builtin.copy:
    src: docusaurus
    dest: /var/www/html/
  notify: restart nginx
- name: Copy nginx setting
  ansible.builtin.copy:
    src: docusaurus-nginx-web
    dest: /etc/nginx/sites-available/
- name: Create symlink
  ansible.builtin.file:
    src: /etc/nginx/sites-available/docusaurus-nginx-web
    dest: /etc/nginx/sites-enabled/default
    state: link
  notify: restart nginx
/ansible/playbooks/roles/nginx/handlers/main.yml :
---
- name: restart nginx
  ansible.builtin.systemd_service:
    name: nginx
    state: restarted
    enabled: yes
Cet exemple montre comment utiliser les handlers pour redémarrer le service Nginx lors de la modification de la configuration.
N'oubliez pas d'ajuster les noms de fichiers et les chemins en fonction de votre configuration.